from src.views.login_view import LoginView
from src.views.register_view import RegisterView
from src.views.reset_password_view import ResetPasswordView
from src.views.user_view import UserMainView
from src.views.admin_view import AdminMainView
from src.models.user_model import UserModel, UserInfo

class AuthController:
    """认证控制器，处理登录、注册、重置密码等逻辑"""
    
    def __init__(self):
        # 初始化视图
        self.login_view = LoginView(self)
        self.register_view = None
        self.reset_password_view = None
        self.main_view = None
        self.admin_view = None
        
        # 初始化模型
        self.user_model = UserModel()
        
        # 当前登录用户信息 (UserInfo 对象)
        self.current_user = None
    
    def show_login(self):
        """显示登录界面"""
        if self.register_view:
            self.register_view.hide()
        if self.reset_password_view:
            self.reset_password_view.hide()
        if self.main_view:
            self.main_view.hide()
        if self.admin_view:
            self.admin_view.hide()
        self.login_view.show()
        
    def show_register(self):
        """显示注册界面"""
        if not self.register_view:
            self.register_view = RegisterView(self)
        self.login_view.hide()
        self.register_view.show()
    
    def show_reset_password(self):
        """显示重置密码界面"""
        if not self.reset_password_view:
            self.reset_password_view = ResetPasswordView(self)
        self.login_view.hide()
        self.reset_password_view.show()
        
    def show_main(self):
        """根据用户角色显示对应的主界面"""
        if self.current_user and self.current_user.is_admin():
            # 管理员界面
            if not self.admin_view:
                self.admin_view = AdminMainView(self)
            
            # 设置管理员欢迎信息
            self.admin_view.set_welcome_message(self.current_user.username)
            
            # 隐藏其他界面并显示管理员界面
            self._hide_all_views()
            self.admin_view.show()
        else:
            # 普通用户界面
            if not self.main_view:
                self.main_view = UserMainView(self)
            
            # 设置用户欢迎信息
            self.main_view.set_welcome_message(self.current_user.username)
    
            # 隐藏其他界面并显示用户界面
            self._hide_all_views()
            self.main_view.show()
    
    def _hide_all_views(self):
        """隐藏所有界面"""
        self.login_view.hide()
        if self.register_view:
            self.register_view.hide()
        if self.reset_password_view:
            self.reset_password_view.hide()
        if self.main_view:
            self.main_view.hide()
        if self.admin_view:
            self.admin_view.hide()
            
    def do_login(self, phone, password):
        """处理登录逻辑"""
        user_info = self.user_model.authenticate(phone, password)
        if user_info:
            self.current_user = user_info
            self.login_view.show_login_success(f'欢迎回来， {user_info.username}！')
            self.show_main()
        else:
            self.login_view.show_login_error('手机号或密码错误，请重试！')
    
    def do_register(self, phone, password):
        """处理注册逻辑"""
        # 注册用户
        if self.user_model.register_user(phone, password):
            self.register_view.show_register_success()
            self.show_login()
        else:
            self.register_view.show_register_error('注册失败，请稍后重试！')
            
    def do_reset_password(self, phone, new_password):
        """处理重置密码逻辑"""
        # 重置密码
        if self.user_model.reset_password(phone, new_password):
            self.reset_password_view.show_reset_success()
            self.show_login()
        else:
            self.reset_password_view.show_reset_error('重置密码失败，请稍后重试！')
            
    def logout(self):
        """退出登录"""
        self.current_user = None
        self.show_login()
        
    def get_current_user(self):
        """获取当前登录用户信息"""
        return self.current_user